package BL;

import BE.BEPaleta;
import DA.DAPaleta;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class BLPaleta
{
    //MANTENIMIENTO
    public void buscarPallet (String nombre, int idTipoPallet,
                              int idEstado, JTable tblDatos, int tipoBusqueda)
    {
        BLValidaciones valida = new BLValidaciones();
        DAPaleta dAPallet = new DAPaleta();
        ResultSet rs = null;
        BEPaleta pallet = new BEPaleta();

        pallet.setNombre(valida.validarSqlInjection(nombre));
        pallet.setIdTipoPallet(idTipoPallet);
        pallet.setEstado(idEstado);

        rs = dAPallet.buscarPallets(pallet,tipoBusqueda); //1 para buscar por parametros de busqueda
        this.llenaTabla(rs, tblDatos);
    }

    public void llenaTabla (ResultSet rs, JTable tblDatos)
    {
        BLModelo modelo = new BLModelo();
        tblDatos.setModel(modelo);

        modelo.addColumn("IDPallet");
        modelo.addColumn("Paleta");
        modelo.addColumn("Tipo de Paleta");
        modelo.addColumn("Descripcion");
        modelo.addColumn("Estado");
        //Ocultar columna ID
        tblDatos.getColumnModel().getColumn(0).setMaxWidth(0);
        tblDatos.getColumnModel().getColumn(0).setMinWidth(0);
        tblDatos.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0);
        tblDatos.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);

        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[5];
                fila[0] = rs.getObject("IDPALETA");
                fila[1] = rs.getObject(2);
                fila[2] = rs.getObject(3);
                fila[3] = rs.getObject("DESCRIPCION");
                fila[4] = rs.getObject("ESTADO");

                if (fila[4].toString().equals("1"))
                    fila[4] = "ACTIVO";
                else if (fila[4].toString().equals("3"))
                    fila[4] = "OCUPADO";
                else
                    fila[4] = "INACTIVO";
                modelo.addRow(fila);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
        }
    }

    public void limpiaTabla (JTable tblDatos)
    {
        DefaultTableModel modelo = new DefaultTableModel();
        tblDatos.setModel(modelo);

        modelo.addColumn("Paleta");
        modelo.addColumn("Tipo de Paleta");
        modelo.addColumn("Descripcion");
        modelo.addColumn("Estado");
    }

    //ELIMINAR
    public void eliminarPallet (JTable tblDatos)
    {
        DAPaleta daPallet = new DAPaleta();
        int fila;
        int columna = 0; //Columna ID
        int idPallet=0;
        int retorno = 1;

        fila = tblDatos.getSelectedRow();

        if (fila < 0)
            JOptionPane.showMessageDialog(null,"Debe seleccionar una paleta para eliminar",
                                          "Información",JOptionPane.INFORMATION_MESSAGE);
        else if (tblDatos.getModel().getValueAt(fila,4).toString().equals("INACTIVO"))
            JOptionPane.showMessageDialog(null,"La paleta ya se encuentra INACTIVO",
                                          "Error",JOptionPane.ERROR_MESSAGE);
        else if (JOptionPane.showConfirmDialog(null,"¿Desea eliminar la paleta?",
                 "Confirmacion",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE) == 0)
        {
            idPallet = Integer.parseInt(tblDatos.getModel().getValueAt(fila,columna).toString());
            retorno = daPallet.eliminarPallet(idPallet);
        }

        if (retorno == 0)
        {
            
            
            BL.BLLogAudit objGestorLog= new BL.BLLogAudit();
            BE.BELogAudit auxLogAudit= new BE.BELogAudit();
            auxLogAudit.setIdInterface(0);
            auxLogAudit.setIdUsuario(BL.BLCardex.getObjUsuario().getIdUsuario());
            
            auxLogAudit.setAccion("Eliminacion de la Paleta "+ daPallet.getPalletbyId(idPallet).getNombre() +"por el usuario "+BL.BLCardex.getObjUsuario().getUsuario()+"." );
            java.util.Date aux= new java.util.Date();
            java.sql.Timestamp fecha= new java.sql.Timestamp(aux.getTime());
            
            auxLogAudit.setFecha(fecha);
            
            objGestorLog.registrarAccion(auxLogAudit);

            
            
            JOptionPane.showMessageDialog(null,"Se eliminó la paleta",
                                          "Información",JOptionPane.INFORMATION_MESSAGE);
            this.limpiaTabla(tblDatos);
            this.buscarPallet("",0,0,tblDatos,0);
        }
    }

    //AGREGAR
    
    public void agregarPaletaCargaMasiva(BEPaleta paleta)
    {
        DAPaleta dAPallet = new DAPaleta();
        
        dAPallet.agregarPaletaCargaMasiva(paleta);
    }
    public  int agregaPallet(String nombre, int idTipo, String desc)
    {
        BEPaleta pallet = new BEPaleta();
        DAPaleta dAPallet = new DAPaleta();
        BLValidaciones validar = new BLValidaciones();

        if (nombre.equals(""))
            JOptionPane.showMessageDialog(null,"Debe elegir un nombre para la paleta",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else if (idTipo == 0)
            JOptionPane.showMessageDialog(null,"Debe elegir un tipo de paleta",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else if (dAPallet.existeNombre(validar.validarSqlInjection(nombre)))
            JOptionPane.showMessageDialog(null,"El nombre de la paleta ya existe",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else
            if (JOptionPane.showConfirmDialog(null,"¿Desea agregar la paleta?",
                "Confirmación",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE) == 0)
            {
                pallet.setIdTipoPallet(idTipo);
                pallet.setNombre(validar.validarSqlInjection(nombre));
                pallet.setDescripcion(validar.validarSqlInjection(desc));
                
                return dAPallet.agregarPallet(pallet);
            }

        return 1;
    }

    //MODIFICAR
    public BEPaleta getPaletabyID (int idPaleta)
    {
        DAPaleta daPallet = new DAPaleta();
        BEPaleta pallet = daPallet.getPalletbyId(idPaleta);

        return pallet;
    }

    public int modificaPallet (BEPaleta pallet, boolean cambio)
    {
        int retorno = 1;
        DAPaleta daPallet = new DAPaleta();

        if (pallet.getNombre().equals(""))
            JOptionPane.showMessageDialog(null,"Debe elegir un nombre para la paleta",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else if (daPallet.existeNombre(pallet.getNombre()) && cambio)
            JOptionPane.showMessageDialog(null,"El nombre de la paleta ya existe",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else
            if (JOptionPane.showConfirmDialog(null,"¿Desea editar la paleta?",
                "Confirmación",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE) == 0)
            {
                retorno = daPallet.modificaPallet(pallet);
            }      

        return retorno;
    }

    //###########################################


    public List<BEPaleta> listaPallets (){

            DAPaleta daPallet = new DAPaleta();
            return daPallet.listaPallets();


    }



      public void llenarCombo(JComboBox cmbTipoMovimiento){
         BLPaleta blpallet = new BLPaleta();
        List<BEPaleta> pallets = new ArrayList<BEPaleta>();

       pallets = blpallet.listaPallets();


            cmbTipoMovimiento.addItem(new BLCombo(0,"TODOS"));

        if (pallets != null)
            for (int i=0;i<pallets.size();i++)
                cmbTipoMovimiento.addItem(new BLCombo(pallets.get(i).getIdPallet(),
                                     pallets.get(i).getNombre()));

    }


      public BEPaleta llenaVentana (int id)
    {
        DAPaleta daPaleta = new DAPaleta();
        BEPaleta contacto = daPaleta.getPalletbyId(id);

        return contacto;
    }


}
